package cc.geguo.ognl;




import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

import java.util.Map;
public class OgnlDemo2 extends ActionSupport{
//	这些成员 都保存在root中
    private User user = new User(100,"Jacks");
    public User getUser() {
		return user;
	}
    public void setUser(User user) {
		this.user = user;
	}

	/**
	 * @return 获取Action对象的valueStack实例
	 * @throws Exception
	 */
	@Override
	public String execute() throws Exception {
		ActionContext ac = ActionContext.getContext();
		ac.getContextMap().put("request_data", "request_data");//直接插入 ActionContex 一级元素中
		ac.getSession().put("Session_data", "Session_data");//<s:property value="#session.Session_data"/> 插入到一级元素 session 的value 属于二级公民
		ac.getApplication().put("Application_data", "Application_data");//同session 一样

		/**
		 * 把数据设置到request 中
		 * */
		Map<String,Object> map = (Map<String, Object>) ac.get("request");//requst 是ActionContext 的一级公民
		map.put("request_data", "request_data");// ActionContext 的二级公民，requst 的一级公民
		map.put("cn", "China");//<s:property value="#request.cn"/>

		// 值栈
		ValueStack vs = ac.getValueStack();//一级公民
//	=============操作根对象==============================================
//		vs.getRoot().push();// 设置到Root中
//		vs.push(new User(1002,"Tom"));// 给root 添加新的元素(默认是Action实例和DefaultTextProvider)
		vs.pop();//把刚刚添加的又 移除了(如果没有添加新元素到栈顶 那么将把Action实例移除)
		/**
		 * {@link scrrencap/set}
		 * */
		// 添加对象 给栈顶 添加一个HashMap(填充多个指)
		vs.set("user", new User(1,"Jacky1"));
		vs.set("user1", new User(2,"Jacky2"));
		
		
		return super.execute();
	}

	private void getVs() {
//		HttpServletRequest request = ServletActionContext.getRequest();
		/**
		 * valueStack 通过 request 进行传递
		 * */
//		ValueStack vs1 = (ValueStack) request.getAttribute("struts.valueStack");
		
		ActionContext ac = ActionContext.getContext();
		ValueStack vs2 = ac.getValueStack();
		
//		System.out.println(vs1 == vs2);//true
	}
	
	
	
}














